Google workflowsでSlackにメッセージを送ってみる

Google workflowsでSlackにメッセージを送ってみる

Clock Icon2024.10.29

はじめに

データアナリティクス事業本部のkobayashiです。

GoogleCloudのWorkflowsで通知処理を行う場合にSlack APIを使って任意のチャンネルにメッセージを送るワークフローを試してみたのでまとめます。

WorkflowsとSlackメッセージの送信API

Slackのチャンネルにメッセージを送信する方法はいくつかありますが、今回はchat.postMessageのAPIを使って送信してみます。chat.postMessageを使った設定方法と送信方法は次のエントリを参考に設定します。

Slackチャンネルにメッセージを投稿できるSlackAppを作成する | DevelopersIO

Cloud Workflowsでは外部のAPIにリクエストを送ることができるのでこの機能でSlackのchat.postMessageのAPIを使ってメッセージを送ります。

Google workflowsで外部のAPIからデータを取得してみる | DevelopersIO

では早速試してみます。

WorkflowsでSlackメッセージ送信を試してみる

workflowsのyamlファイルは次のものを使います。

wf-slack_notify.yml
main:
  steps:
    - init:
        assign:
          - secret_id: slack_boto_token
    - access_secret:
        call: googleapis.secretmanager.v1.projects.secrets.versions.accessString
        args:
          secret_id: ${secret_id}
          project_id: ${sys.get_env("GOOGLE_CLOUD_PROJECT_ID")}
        result: slack_boto_token
    - slack_notify:
        call: http.post
        args:
          url: https://slack.com/api/chat.postMessage
          headers:
            Authorization: ${ "Bearer " + slack_boto_token}
            Content-type: application/json
          body:
            channel: '{チャンネル名}'
            markdown: True
            text: ${ "Bot Tokenを使用した *Slcak通知* のテスト\n[ProjectID] `" + sys.get_env("GOOGLE_CLOUD_PROJECT_ID" ) + "`\n[CloudWorkflowID] `" + sys.get_env("GOOGLE_CLOUD_WORKFLOW_ID" )+ "`\n[CloudWorkflowExecutionID] `" + sys.get_env("GOOGLE_CLOUD_WORKFLOW_EXECUTION_ID" ) + "`"}
        result: result_api
    - the_end:
        return:
          - ${result_api}

Slackのchat.postMessageでメッセージを送信するにはあらかじめSlackアプリを作成してBot User OAuth Tokenを取得しておくことが必要です。このBot User OAuth Tokenを使ってAPIにリクエストする必要があるのでBot User OAuth TokenをSecretManagerに登録してWorkflows中で使います。

それではこのワークフローを実行するために準備をします。
SecretManagerに登録してあるシークレット情報のWorkflows中での使い方は別のエントリがありますのでそちらを踏襲します。

Google workflowsでSecretManagerコネクタを使ってみる | DevelopersIO

$ gcloud secrets create slack_boto_token --replication-policy="automatic"
$ printf "xoxb-xxxxxxxxxxxxxxxxxxxxxxxxx" | gcloud secrets versions add slack_boto_token --data-file=-
$ gcloud iam service-accounts create wf-sa-for-sm --display-name="Workflow Service Account for Accessing Secret Manager"
$ gcloud projects add-iam-policy-binding {プロジェクトID} \
    --member="serviceAccount:wf-sa-for-sm@{プロジェクトID}.iam.gserviceaccount.com" \
    --role="roles/secretmanager.secretAccessor" \
    --condition="expression=resource.name.endsWith('/secrets/slack_boto_token/versions/latest'),title=AccessToEstatApiIdSecret,description=Allows access only to the slack_boto_token secret"

SecretManagerにslack_boto_tokenとしてBot User OAuth Tokenを登録でき、workflowsで使うサービスアカウントにもread権限を与えました。

これで準備は整ったので これをdeployして実行してみます。

$ gcloud workflows deploy wf-slack_notify \
	--source=wf-slack_notify.yml \
	--location asia-northeast1 \
	--service-account=wf-sa-for-sm@{プロジェクトID}.iam.gserviceaccount.com
$ gcloud workflows run wf-slack_notify --location asia-northeast1

argument: 'null'
createTime: '2024-10-28T00:11:46.265570350Z'
duration: 2.282765808s
endTime: '2024-10-28T00:11:48.548336158Z'
name: projects/233151396088/locations/asia-northeast1/workflows/wf-slack_notify/executions/d42b35db-3ffb-4eac-802a-a8977783f11d
result: '[{"body":{"channel":"CXXXXXXXXX","message":{"app_id":"xxxxxxxxxx","blocks":[{"block_id":"WAp3W","elements":[{"elements":[{"text":"Bot
  Tokenを使用した ","type":"text"},{"style":{"bold":true},"text":"Slcak通知","type":"text"},{"text":"
  のテスト\n[ProjectID] ","type":"text"},{"style":{"code":true},"text":"{プロジェクトID}","type":"text"},{"text":"\n[CloudWorkflowID]
  ","type":"text"},{"style":{"code":true},"text":"wf-slack_notify","type":"text"},{"text":"\n[CloudWorkflowExecutionID]...'
startTime: '2024-10-28T00:11:46.265570350Z'
state: SUCCEEDED
status:
  currentSteps:
  - routine: main
    step: the_end
workflowRevisionId: 000022-611

Workflowsのslack_notifyステップでSlackのchat.postMessageのAPIの呼び出しが成功しワークフロー全体の実行が成功しました。
Slackのチャンネルを確認するとCloud Workflowsから送信されたメッセージが届いていることが確認できます。
スクリーンショット_2024-10-28_9_20_39

まとめ

GoogleCloudのWorkflowsで外部APIの実行を使ってSlackのチャンネルにメッセージを送ってみました。Workflowsの成功結果や失敗の詳細などをSlackで確認できるので今使っているWorkflowsにも組み込んでみたいと思います。

最後まで読んで頂いてありがとうございました。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.